package com.cnbm.wcsbasic.protocol.netty.modbus.entity;



import com.cnbm.wcsbasic.protocol.netty.io.common.CaffeineUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * @Desc: ""
 * @Author: caixiang
 * @DATE: 2024-04-23 9:39
 */
public class MBAP {
    //唯一标识符  2byte
    private byte[] transationId;
    //协议号 ，固定 00 00 2byte
    private byte[] protocolIdentifier;
    //表示接下来的byte数量，单位为字节。 2byte
    private byte[] nextAllByteNum;
    //设备地址（默认：1）（就是modbus slave 里面的id） 1byte
    private byte unitId;

    public MBAP(byte[] nextAllByteNum, byte unitId) {
        this.transationId = CaffeineUtil.getUUID();
        this.protocolIdentifier = new byte[]{0x00,0x00};
        this.nextAllByteNum = nextAllByteNum;
        this.unitId = unitId;
    }
    public MBAP(byte unitId) {
        this.transationId = CaffeineUtil.getUUID();
        this.protocolIdentifier = new byte[]{0x00,0x00};
        this.nextAllByteNum = new byte[]{0x00,0x06};
        this.unitId = unitId;
    }
    public MBAP(byte[] allBytes){
        this.transationId = new byte[]{allBytes[0],allBytes[1]};
        this.protocolIdentifier = new byte[]{allBytes[2],allBytes[3]};
        this.nextAllByteNum = new byte[]{allBytes[4],allBytes[5]};
        this.unitId = allBytes[6];
    }

    public String getTransationId() {
        return transationId[0]+"-"+transationId[1];
    }

    public List<Byte> toBytes(){
        List<Byte> bytes = new ArrayList<Byte>();
        //事务处理标识 2个字节
        bytes.add(transationId[0]);
        bytes.add(transationId[1]);
        //协议标识
        bytes.add(protocolIdentifier[0]);
        bytes.add(protocolIdentifier[1]);
        //剩余所有长度
        bytes.add(nextAllByteNum[0]);
        bytes.add(nextAllByteNum[1]);
        //单元标识符
        bytes.add(unitId);
        return bytes;
    }

}
